package com.ruoyi.basebill.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.basebill.DTO.JtzygztzEntryInfo;
import com.ruoyi.basebill.DTO.JtzygztzInfo;
import com.ruoyi.basebill.DTO.NzjclEntryInfo;
import com.ruoyi.basebill.DTO.NzjclInfo;
import com.ruoyi.basebill.domain.WfzJtzygztz;
import com.ruoyi.basebill.domain.WfzJtzygztzentry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.basebill.domain.WfzNzjjtentry;
import com.ruoyi.basebill.mapper.WfzNzjjtMapper;
import com.ruoyi.basebill.domain.WfzNzjjt;
import com.ruoyi.basebill.service.IWfzNzjjtService;

/**
 * 计提年终奖Service业务层处理
 * 
 * @author xiefeng
 * @date 2022-12-12
 */
@Service
public class WfzNzjjtServiceImpl implements IWfzNzjjtService 
{
    @Autowired
    private WfzNzjjtMapper wfzNzjjtMapper;

    /**
     * 查询计提年终奖
     * 
     * @param fid 计提年终奖主键
     * @return 计提年终奖
     */
    @Override
    public WfzNzjjt selectWfzNzjjtByFid(Long fid)
    {
        return wfzNzjjtMapper.selectWfzNzjjtByFid(fid);
    }

    /**
     * 查询计提年终奖列表
     * 
     * @param wfzNzjjt 计提年终奖
     * @return 计提年终奖
     */
    @Override
    public List<WfzNzjjt> selectWfzNzjjtList(WfzNzjjt wfzNzjjt)
    {
        return wfzNzjjtMapper.selectWfzNzjjtList(wfzNzjjt);
    }

    /**
     * 新增计提年终奖
     * 
     * @param wfzNzjjt 计提年终奖
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWfzNzjjt(WfzNzjjt wfzNzjjt)
    {
        int rows = wfzNzjjtMapper.insertWfzNzjjt(wfzNzjjt);
        insertWfzNzjjtentry(wfzNzjjt);
        return rows;
    }

    /**
     * 修改计提年终奖
     * 
     * @param wfzNzjjt 计提年终奖
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWfzNzjjt(WfzNzjjt wfzNzjjt)
    {
        wfzNzjjtMapper.deleteWfzNzjjtentryByFparentid(wfzNzjjt.getFid());
        insertWfzNzjjtentry(wfzNzjjt);
        return wfzNzjjtMapper.updateWfzNzjjt(wfzNzjjt);
    }

    /**
     * 批量删除计提年终奖
     * 
     * @param fids 需要删除的计提年终奖主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzNzjjtByFids(Long[] fids)
    {
        wfzNzjjtMapper.deleteWfzNzjjtentryByFparentids(fids);
        return wfzNzjjtMapper.deleteWfzNzjjtByFids(fids);
    }

    /**
     * 删除计提年终奖信息
     * 
     * @param fid 计提年终奖主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzNzjjtByFid(Long fid)
    {
        wfzNzjjtMapper.deleteWfzNzjjtentryByFparentid(fid);
        return wfzNzjjtMapper.deleteWfzNzjjtByFid(fid);
    }

    @Override
    public String importNzjjt(WfzNzjjt wfzNzjjt) {
        NzjclInfo nzjjtInfo = new NzjclInfo();
        String fnumber = wfzNzjjt.getFnumber(); //单据编码
        String fcompany = wfzNzjjt.getFcompany(); //公司
        String fperiod = wfzNzjjt.getFperiod();//薪酬期间
        String fvourtype = wfzNzjjt.getFvourtype(); //凭证字


        nzjjtInfo.setNumber(fnumber);
        nzjjtInfo.setCompany(fcompany);
        nzjjtInfo.setPeriod(fperiod);
        nzjjtInfo.setVourType(fvourtype);
        nzjjtInfo.setSourcebillid(String.valueOf(wfzNzjjt.getFid()));

        List<WfzNzjjtentry> wfzNzjjtentryList = wfzNzjjt.getWfzNzjjtentryList();
        ArrayList<NzjclEntryInfo> entry = new ArrayList<>();
        //组装分录数据
        for (int j=0;j<wfzNzjjtentryList.size();j++){
            WfzNzjjtentry wfzNzjjtentry = wfzNzjjtentryList.get(j);
            String fcostnumber = wfzNzjjtentry.getFcostnumber();//成本中心
            BigDecimal fnzj = wfzNzjjtentry.getFnzj();//年终奖
            String fcostcompany = wfzNzjjtentry.getFcostcompany();//成本中心所属财务组织
            String fjzcompany = wfzNzjjtentry.getFjzcompany();//记账公司
            String fjsfs = wfzNzjjtentry.getFjsfs();//组织间结算方式
            String fcbzxxz = wfzNzjjtentry.getFcbzxxz();//成本中心属性
            String fvourtype1 = wfzNzjjtentry.getFvourtype();//凭证字

            NzjclEntryInfo nzjjtEntryInfo = new NzjclEntryInfo();
            nzjjtEntryInfo.setCostCenter(fcostnumber);
            nzjjtEntryInfo.setNzj(fnzj);
            nzjjtEntryInfo.setCostcompany(fcostcompany);
            nzjjtEntryInfo.setJzcompany(fjzcompany);
            nzjjtEntryInfo.setJsfs(fjsfs);
            nzjjtEntryInfo.setCbzxxz(fcbzxxz);
            nzjjtEntryInfo.setVourType(fvourtype1);


            entry.add(nzjjtEntryInfo);

        }

        nzjjtInfo.setEntry(entry);


        //转化为json
        String json = JSONObject.toJSONString(nzjjtInfo);

        return json;
    }

    /**
     * 新增计提年终奖分录信息
     * 
     * @param wfzNzjjt 计提年终奖对象
     */
    public void insertWfzNzjjtentry(WfzNzjjt wfzNzjjt)
    {
        List<WfzNzjjtentry> wfzNzjjtentryList = wfzNzjjt.getWfzNzjjtentryList();
        Long fid = wfzNzjjt.getFid();
        if (StringUtils.isNotNull(wfzNzjjtentryList))
        {
            List<WfzNzjjtentry> list = new ArrayList<WfzNzjjtentry>();
            for (WfzNzjjtentry wfzNzjjtentry : wfzNzjjtentryList)
            {
                wfzNzjjtentry.setFparentid(fid);
                list.add(wfzNzjjtentry);
            }
            if (list.size() > 0)
            {
                wfzNzjjtMapper.batchWfzNzjjtentry(list);
            }
        }
    }
}
